package offerbook;

import java.util.Arrays;

/**
 * Created at 2019/11/1 0001 下午 11:26
 * 从一副扑克牌中连续抽取n(>=5)张扑克，判断这n张扑克是否是顺子。
 * 大小王可以作为任意排使用，J,Q,K,A分别用11,12,13,1表示
 */
public class Code44_ContinuousPoker {

    /**
     * 1.排序，
     * 2.找出0个数，判断不连续的间隔数。注意要排除对子。
     * 判断 0个数 >= 不连续间隔数
     *
     * @param numbers 抓的牌组成的数组
     */
    public static boolean isContinuous(int [] numbers) {
        if(numbers == null || numbers.length <=4){
            return false;
        }
        //1先排序
        Arrays.sort(numbers);
        //2 判断0的个数是否大于等于间隔数
        /**
         * 如  {0,1,3,4,5}  间隔数1-3隔了1个2
         */
        //2.1统计0的个数
        int zeroCount = 0;
        for (int i = 0; numbers[i] == 0; i++) {
            zeroCount++;
        }
        //2.2统计数组的间隔数
        //找到第一个非0的索引
        int small = zeroCount;
        int big = small +1;
        //判断间隔数
        int gap = 0;
        while (big < numbers.length){
            //有对子，返回
            if(numbers[small] == numbers[big]){
                return false;
            }
            //{0,1,3,4,5}  1->3 gap = 3-1-1
            gap += numbers[big++] - numbers[small++] - 1;
        }
        return gap <= zeroCount;
    }

    public static void main(String[] args) {
        System.out.println(isContinuous(new int[]{0, 1, 3, 4, 6}));
    }
}
